/*-------------------------------------------------------------------------
 *
 * replnodes.h
 *      definitions for replication grammar parse nodes
 *
 *
 * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 * src/include/nodes/replnodes.h
 *
 *-------------------------------------------------------------------------
 */
#ifndef REPLNODES_H
#define REPLNODES_H

#include "access/xlogdefs.h"
#include "nodes/pg_list.h"

typedef enum ReplicationKind
{
    REPLICATION_KIND_PHYSICAL,
    REPLICATION_KIND_LOGICAL
} ReplicationKind;


/* ----------------------
 *        IDENTIFY_SYSTEM command
 * ----------------------
 */
typedef struct IdentifySystemCmd
{
    NodeTag        type;
} IdentifySystemCmd;


/* ----------------------
 *        BASE_BACKUP command
 * ----------------------
 */
typedef struct BaseBackupCmd
{
    NodeTag        type;
    List       *options;
} BaseBackupCmd;


/* ----------------------
 *        CREATE_REPLICATION_SLOT command
 * ----------------------
 */
typedef struct CreateReplicationSlotCmd
{
    NodeTag        type;
    char       *slotname;
    ReplicationKind kind;
    char       *plugin;
    bool        temporary;
    List       *options;
} CreateReplicationSlotCmd;


/* ----------------------
 *        DROP_REPLICATION_SLOT command
 * ----------------------
 */
typedef struct DropReplicationSlotCmd
{
    NodeTag        type;
    char       *slotname;
} DropReplicationSlotCmd;


/* ----------------------
 *        START_REPLICATION command
 * ----------------------
 */
typedef struct StartReplicationCmd
{
    NodeTag        type;
    ReplicationKind kind;
    char       *slotname;
    TimeLineID    timeline;
    XLogRecPtr    startpoint;
    List       *options;
} StartReplicationCmd;


/* ----------------------
 *        TIMELINE_HISTORY command
 * ----------------------
 */
typedef struct TimeLineHistoryCmd
{
    NodeTag        type;
    TimeLineID    timeline;
} TimeLineHistoryCmd;

/* ----------------------
 *        SQL commands
 * ----------------------
 */
typedef struct SQLCmd
{
    NodeTag        type;
} SQLCmd;

#endif                            /* REPLNODES_H */
